{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "following https://lifetimes.readthedocs.io/en/latest/Quickstart.html#estimating-customer-lifetime-value-using-the-gamma-gamma-model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "beta geometric negative binomial distribution\n",
    "Counting Your Customers the Easy Way: An Alternative to the Pareto/NBD Model\n",
    "Peter S. Fader\n",
    "Bruce G.S.Hardie\n",
    "Ka Lok Lee\n",
    "2003\n",
    "http://mktg.uni-svishtov.bg/ivm/resources/Counting_Your_Customers.pdf"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "as opposed to Pareto/NBD, which assumes Poisson distributed purchases with a Gamma prior and exponentially distributed customer lifetimes with a Gamma prior"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "dataset available at https://www.kaggle.com/blastchar/telco-customer-churn/data#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "we need a dataset that summarizes customers by their lifetime (age; time since first purchase), frequency (number of purchases), and monetary value (average value per purchase). The lifetime package provides a utility function for this: summary_data_from_transaction_data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install lifetimes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from lifetimes.datasets import load_cdnow_summary, load_cdnow_summary_data_with_monetary_value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = load_cdnow_summary_data_with_monetary_value()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2357"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "946"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(data.frequency>0).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>frequency</th>\n",
       "      <th>recency</th>\n",
       "      <th>T</th>\n",
       "      <th>monetary_value</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>customer_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>30.43</td>\n",
       "      <td>38.86</td>\n",
       "      <td>22.35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1.71</td>\n",
       "      <td>38.86</td>\n",
       "      <td>11.77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>38.86</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>38.86</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>38.86</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             frequency  recency      T  monetary_value\n",
       "customer_id                                           \n",
       "1                    2    30.43  38.86           22.35\n",
       "2                    1     1.71  38.86           11.77\n",
       "3                    0     0.00  38.86            0.00\n",
       "4                    0     0.00  38.86            0.00\n",
       "5                    0     0.00  38.86            0.00"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The dataset is explained in the lifetimes documentation:\n",
    "    \n",
    "https://lifetimes.readthedocs.io/en/latest/Quickstart.html#estimating-customer-lifetime-value-using-the-gamma-gamma-model\n",
    "    \n",
    "* frequency represents the number of repeat purchases the customer has made. This means that it’s one less than the total number of purchases. This is actually slightly wrong. It’s the count of time periods the customer had a purchase in. So if using days as units, then it’s the count of days the customer had a purchase on.\n",
    "* T represents the age of the customer in whatever time units chosen (weekly, in the above dataset). This is equal to the duration between a customer’s first purchase and the end of the period under study.\n",
    "* recency represents the age of the customer when they made their most recent purchases. This is equal to the duration between a customer’s first purchase and their latest purchase. (Thus if they have made only 1 purchase, the recency is 0.)\n",
    "* monetary_value represents the average value of a given customer’s purchases. This is equal to the sum of all a customer’s purchases divided by the total number of purchases. Note that the denominator here is different than the frequency described above.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>frequency</th>\n",
       "      <th>recency</th>\n",
       "      <th>T</th>\n",
       "      <th>monetary_value</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>customer_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>30.43</td>\n",
       "      <td>38.86</td>\n",
       "      <td>22.35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1.71</td>\n",
       "      <td>38.86</td>\n",
       "      <td>11.77</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>38.86</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>38.86</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>38.86</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             frequency  recency      T  monetary_value\n",
       "customer_id                                           \n",
       "1                    2    30.43  38.86           22.35\n",
       "2                    1     1.71  38.86           11.77\n",
       "3                    0     0.00  38.86            0.00\n",
       "4                    0     0.00  38.86            0.00\n",
       "5                    0     0.00  38.86            0.00"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "frequency         1.0\n",
       "recency           1.0\n",
       "T                 1.0\n",
       "monetary_value    1.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.groupby(by='customer_id').count().mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 20)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = data.frequency.hist(bins=30)\n",
    "plt.ylabel('customers')\n",
    "plt.xlabel('number of purchases')\n",
    "plt.xlim(left=0, right=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0424268137462878"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.frequency.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "frequency          1.042427\n",
       "recency            6.845787\n",
       "T                 32.715829\n",
       "monetary_value    14.079045\n",
       "dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from dython.nominal import associations\n",
    "associations(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SpearmanrResult(correlation=0.9280848765775312, pvalue=0.0)"
      ]
     },
     "execution_count": 130,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import scipy\n",
    "\n",
    "scipy.stats.spearmanr(data.recency, data.monetary_value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SpearmanrResult(correlation=0.9520950252874786, pvalue=0.0)"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scipy.stats.spearmanr(data.recency, data.monetary_value * data.frequency)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SpearmanrResult(correlation=0.9280848765775312, pvalue=0.0)"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scipy.stats.spearmanr(data.recency, data.monetary_value)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "CDNOW data presented in Fader et al. 2005\n",
    "Fader, Peter S., Bruce G. S. Hardie, and Ka Lok Lee (2005), “RFM and CLV: Using Iso-value Curves for Customer Base Analysis,”Journal of MarketingResearch,42(November), 415–430"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Pete Fader's publications\n",
    "https://scholar.google.com/citations?user=NYOYpwQAAAAJ"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "https://www.tensorflow.org/probability/api_docs/python/tfp/distributions/GammaGamma"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[1]: Peter S. Fader, Bruce G. S. Hardi. The Gamma-Gamma Model of Monetary Value. Technical Report, 2013. http://www.brucehardie.com/notes/025/gamma_gamma.pdf\n",
    "\n",
    "[2]: Michael Figurnov, Shakir Mohamed, Andriy Mnih. Implicit Reparameterization Gradients. arXiv preprint arXiv:1805.08498, 2018. https://arxiv.org/abs/1805.08498"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<lifetimes.BetaGeoFitter: fitted with 2357 subjects, a: 0.79, alpha: 4.41, b: 2.43, r: 0.24>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from lifetimes import GammaGammaFitter, BetaGeoFitter\n",
    "bgf = BetaGeoFitter(penalizer_coef=0.0)\n",
    "bgf.fit(data['frequency'], data['recency'], data['T'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f12f1d9c6d0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from lifetimes.plotting import plot_frequency_recency_matrix\n",
    "\n",
    "plot_frequency_recency_matrix(bgf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f12f2f18210>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from lifetimes.plotting import plot_probability_alive_matrix\n",
    "\n",
    "plot_probability_alive_matrix(bgf)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_repeat = data[data.frequency>0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<lifetimes.GammaGammaFitter: fitted with 946 subjects, p: 6.25, q: 3.74, v: 15.45>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ggf = GammaGammaFitter(penalizer_coef=0.0)\n",
    "ggf.fit(data_repeat.frequency, data_repeat.monetary_value)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "customer_id\n",
      "1     24.658616\n",
      "2     18.911480\n",
      "3     35.171002\n",
      "4     35.171002\n",
      "5     35.171002\n",
      "6     71.462851\n",
      "7     18.911480\n",
      "8     35.171002\n",
      "9     27.282408\n",
      "10    35.171002\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(ggf.conditional_expected_average_profit(\n",
    "        data['frequency'],\n",
    "        data['monetary_value']\n",
    "    ).head(10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected conditional average profit: 35.25295817605011, Average profit: 35.07855179704026\n"
     ]
    }
   ],
   "source": [
    "print('Expected conditional average profit: %s, Average profit: %s' % (\n",
    "    ggf.conditional_expected_average_profit(\n",
    "        data['frequency'],\n",
    "        data['monetary_value']\n",
    "    ).mean(),\n",
    "    data[data['frequency']>0]['monetary_value'].mean()\n",
    "))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "customer_id\n",
      "1      140.096218\n",
      "2       18.943466\n",
      "3       38.180575\n",
      "4       38.180575\n",
      "5       38.180575\n",
      "6     1003.868285\n",
      "7       28.109681\n",
      "8       38.180575\n",
      "9      167.418224\n",
      "10      38.180575\n",
      "Name: clv, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(ggf.customer_lifetime_value(\n",
    "    bgf, #the model to use to predict the number of future transactions\n",
    "    data['frequency'],\n",
    "    data['recency'],\n",
    "    data['T'],\n",
    "    data['monetary_value'],\n",
    "    time=12, # months\n",
    "    discount_rate=0.01 # monthly discount rate ~ 12.7% annually\n",
    ").head(10))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "very similar dataset: online retail at https://www.kaggle.com/blastchar/telco-customer-churn/data#\n",
    "also available at http://archive.ics.uci.edu/ml/datasets/Online+Retail"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "you can see a model comparison at https://github.com/GoogleCloudPlatform/tensorflow-lifetime-value\n",
    "    \n",
    "* lifetimes\n",
    "* tensorflow neural network\n",
    "* automl\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
